Link aggregation, also known as trunking, is a mechanism for using multiple switch ports in parallel to increase link speed beyond the speed provided by a single port or link. Link aggregation is also described in more detail in IEEE 802.3, which is incorporated herein by reference.
Link aggregation may increase the availability of the link-aggregated connection and may also increase throughput. A common implementation involves a switch tying two or more ports on the switch together such that they operate together as a single port or link. In practice, if one port fails, then another is available for use. In theory, the throughput may be increased by a factor equal to the number of links that are aggregated. However, in practice, this amount of throughput increase is rarely the case.
One challenge in using link aggregation is that the sequence of frames may be reordered if the frames for a flow are divided between several links. Such reordering may cause diminished performance, loss of information, corruption of data, or the like. Reordering of frames between different communications or flows may not cause such problems. Generally, it is preferable to maintain the same order for frames within the same communication or flow. This ordering requirement is sometimes referred to as the “Link Invariant.”
One mechanism for ensuring the Link Invariant is to map the communication or flow to a particular link/switch port based on a stateless hash. Common hash functions include a hash on an OSI Level two (2) MAC address, an OSI Level three (3) address, an OSI Level four port, or some combination thereof. The result of the hash is then associated with one of the links within the link aggregation. Consequently frames for the flow are sent over the associated link. However, even using a stateless hash mapping function, optimal distribution of communication over the links in an aggregation/trunk is rarely achieved. Therefore, it is with respect to this consideration and others that the current invention is directed.